package com.ckr.springcloud.controller;

import com.ckr.springcloud.pojo.Dept;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

import javax.annotation.Resource;
import java.util.List;

/**
 * @author Shadowckr
 * @create 2022-01-22 10:16
 */

@RestController
public class DeptConsumerController {
    //  理解：消费者，不应该有service层
    // 使用RestTemplate访问restful接口非常的简单粗暴且无脑
    // （url，requestMap，ResponseBean.class） 这三个参数分别代表
    // REST请求地址，请求参数，Http响应转换 被 转换成的对象类型

    @Resource
    private RestTemplate restTemplate;

    private static final String REST_URL_PREFIX = "http://localhost:8001";

    @RequestMapping("/consumer/dept/add")
    public Boolean add(Dept dept) {
        //Unboxing of 'null' may produce 'NullPointerException'
        //https://blog.csdn.net/shenzhou_yh/article/details/109091249
        return restTemplate.postForObject(REST_URL_PREFIX + "/dept/add", dept, Boolean.class);
        //return Boolean.TRUE.equals(restTemplate.postForObject(REST_URL_PREFIX + "/dept/add", dept, Boolean.class));
    }

    @RequestMapping("/consumer/dept/get/{id}")
    public Dept get(@PathVariable("id") Long id) {
        return restTemplate.getForObject(REST_URL_PREFIX + "/dept/get/" + id, Dept.class);
    }

    @RequestMapping("/consumer/dept/list")
    @SuppressWarnings("unchecked")
    public List<Dept> list() {
        return restTemplate.getForObject(REST_URL_PREFIX + "/dept/list", List.class);
    }

    /*
    RestTemplate提供了多种便捷访问远程 Http 服务的方法，是一种简单便捷的访问restful服务模板
    类，是Spring提供的用于访问Rest服务的客户端模板工具集。
    使用RestTemplate访问restful接口非常的简单粗暴且无脑，
    （url，requestMap，ResponseBean.class） 这三个参数分别代表REST请求地址，请求参数，Http响应转换 被 转换成的对象类型
     */

    @GetMapping("/consumer/dept/discovery")
    public Object discovery() {
        return restTemplate.getForObject(REST_URL_PREFIX + "/dept/discovery", Object.class);
    }

}
